// 封装购物车模块
import { defineStore } from "pinia";
import { computed, ref } from "vue";
import { useUserStore } from "./userStore";
import { insertCartAPI, getNewCartListAPI, delCartAPI, mergeCartAPI, updateCartCountAPI  } from "@/apis/cart";

export const useCartStore = defineStore(
  //模块名cart
  "cart",
  () => {
    const userStore = useUserStore();
    // 更准确地检查登录状态，token在userInfo.data.token中
    const isLogin = computed(() => {
      const token = userStore.userInfo?.data?.token;
      console.log('检查购物车store中的登录状态，token:', token ? token.substring(0, 20) + '...' : null);
      return !!token;
    });
    const cartList = ref([]);
     // 获取最新购物车列表action
    const updateNewList = async () => {
      console.log('更新购物车列表');
      try {
        const res = await getNewCartListAPI();
        console.log('获取到的购物车数据:', res);
        // 只有在成功获取数据时才更新购物车列表
        // 修改这里以适应返回的数据结构
        if ((res.code === 200 || res.success) && (res.result || (res.data && res.data.data))) {
          // 处理不同的数据结构
          if (res.result) {
            cartList.value = res.result;
          } else if (res.data && res.data.data) {
            // 处理嵌套的数据结构
            cartList.value = res.data.data.map(item => ({
              id: item.id,
              userId: item.userid,
              productId: item.productid,
              skuId: item.skuid,
              name: item.name,
              attrsText: item.attrstext,
              picture: item.picture,
              price: item.price,
              nowPrice: item.nowprice,
              nowOriginalPrice: item.noworiginalprice,
              selected: item.selected === 1,
              stock: item.stock,
              count: item.count,
              isEffective: item.iseffective === 1,
              isCollect: item.iscollect === 1,
              postFee: item.postfee,
              createTime: item.createtime,
              updateTime: item.updatetime
            }));
          }
          console.log('更新后的购物车列表:', cartList.value);
        } else {
          console.log('获取购物车列表失败，不更新本地列表');
        }
      } catch (error) {
        console.error('更新购物车列表失败:', error);
      }
    };

    // 合并购物车
    const mergeCart = async () => {
      console.log('尝试合并购物车, 当前登录状态:', isLogin.value);
      console.log('用户信息:', userStore.userInfo?.data?.username);
      console.log('本地购物车列表数量:', cartList.value.length);
      if (isLogin.value && cartList.value.length > 0) {
        console.log('执行购物车合并操作');
        try {
          // 调用合并购物车接口
          const res = await mergeCartAPI(cartList.value);
          console.log('合并购物车响应:', res);
          
          // 只有在合并成功时才清空本地购物车
          if (res.code === 200 || res.success) {
            console.log('购物车合并成功');
            // 清空本地购物车
            clearCart();
            console.log('已清空本地购物车');
            // 获取服务端购物车列表
            await updateNewList();
          } else {
            console.log('购物车合并失败:', res.msg || res.message);
          }
        } catch (error) {
          console.error('购物车合并失败:', error);
        }
      } else {
        console.log('无需合并购物车');
      }
    };

    const addCart = async (goods) => {
      const { skuId, count } = goods;
      console.log('添加商品到购物车:', { skuId, count });
      console.log('当前登录状态:', isLogin.value);
      if (isLogin.value) {
        // 登录之后的加入购物车逻辑
        console.log('用户已登录，通过API添加到购物车');
        try {
          // 确保参数是正确的类型
          const params = { 
            skuId: Number(skuId), 
            count: Number(count) 
          };
          console.log('发送到API的参数:', params);
          const res = await insertCartAPI(params);
          console.log('添加购物车响应:', res);
          if (res.code === 200 || res.success) {
            await updateNewList();
          } else {
            console.log('添加购物车失败，不更新列表');
          }
        } catch (error) {
          console.error('添加到购物车失败:', error);
        }
      } else {
        console.log('用户未登录，添加到本地购物车');
        // 添加购物车操作
        // 已经添加过count+1
        // 没有添加过使用push
        const item = cartList.value.find((item) => goods.skuId === item.skuId);
        if (item) {
          item.count += count;
          console.log('商品已存在，增加数量:', item.count);
        } else {
          cartList.value.push(goods);
          console.log('新商品添加到购物车');
        }
        console.log('当前购物车列表:', cartList.value);
      }
    };
    
    const delCart = async (skuId) => {
      console.log('删除购物车商品:', skuId);
      console.log('当前登录状态:', isLogin.value);
      if (isLogin.value) {
        console.log('用户已登录，通过API删除购物车商品');
        // 调用接口完成删除操作
        try {
          const res = await delCartAPI([skuId]);
          console.log('删除购物车响应:', res);
          if (res.code === 200 || res.success) {
            await updateNewList();
          } else {
            console.log('删除购物车失败，不更新列表');
          }
        } catch (error) {
          console.error('删除购物车商品失败:', error);
        }
      } else {
        console.log('用户未登录，从本地购物车删除');
        // 找到要删除项的下标值，然后使用splice
        const idx = cartList.value.findIndex((item) => skuId === item.skuId);
        if (idx > -1) {
          cartList.value.splice(idx, 1);
          console.log('本地购物车商品已删除');
        }
        console.log('当前购物车列表:', cartList.value);
      }
    };

    // 批量删除购物车商品
    const batchDelCart = async (skuIds) => {
      console.log('批量删除购物车商品:', skuIds);
      console.log('当前登录状态:', isLogin.value);
      if (isLogin.value) {
        console.log('用户已登录，通过API批量删除购物车商品');
        // 调用接口完成删除操作
        try {
          const res = await delCartAPI(skuIds);
          console.log('批量删除购物车响应:', res);
          if (res.code === 200 || res.success) {
            await updateNewList();
          } else {
            console.log('批量删除购物车失败，不更新列表');
          }
        } catch (error) {
          console.error('批量删除购物车商品失败:', error);
        }
      } else {
        console.log('用户未登录，从本地购物车批量删除');
        // 过滤掉要删除的项
        const originalLength = cartList.value.length;
        cartList.value = cartList.value.filter(item => !skuIds.includes(item.skuId));
        console.log(`本地购物车删除了${originalLength - cartList.value.length}个商品`);
        console.log('当前购物车列表:', cartList.value);
      }
    };
    
    // 修改购物车商品数量
    const updateCartCount = async (skuId, count) => {
      console.log('修改购物车商品数量:', { skuId, count });
      console.log('当前登录状态:', isLogin.value);
      if (isLogin.value) {
        console.log('用户已登录，通过API更新购物车商品数量');
        // 对于已登录用户，使用专门的更新数量API
        try {
          // 确保参数是正确的类型
          const params = { 
            skuId: Number(skuId), 
            count: Number(count) 
          };
          console.log('发送到API的参数:', params);
          const res = await updateCartCountAPI(params);
          console.log('更新购物车数量响应:', res);
          if (res.code === 200 || res.success) {
            await updateNewList();
          } else {
            console.log('更新购物车数量失败，不更新列表');
            throw new Error(res.msg || res.message || '更新失败');
          }
        } catch (error) {
          console.error('更新购物车商品数量失败:', error);
          throw error;
        }
      } else {
        console.log('用户未登录，更新本地购物车商品数量');
        // 未登录用户直接修改本地数据
        const item = cartList.value.find(item => item.skuId === skuId);
        if (item) {
          item.count = count;
          console.log('本地购物车商品数量已更新');
        }
        console.log('当前购物车列表:', cartList.value);
      }
    };

    // 清除购物车
    const clearCart = () => {
      console.log('清空购物车');
      cartList.value = [];
    };
    // 单选功能
    const singleCheck = (skuId, selected) => {
      console.log('单选商品:', { skuId, selected });
      const item = cartList.value.find((item) => item.skuId === skuId);
      if (item) {
        item.selected = selected;
        console.log('更新后的商品状态:', item);
      }
    };
    // 是否全选
    const isAll = computed(() => {
      const result = cartList.value.every((item) => item.selected);
      console.log('检查是否全选:', result);
      return result;
    });
    // 全选功能
    const allCheck = (selected) => {
      console.log('全选操作:', selected);
      cartList.value.forEach((item) => (item.selected = selected));
      console.log('全选后购物车状态:', cartList.value);
    };

    // 计算属性
    const allCount = computed(() => {
      const count = cartList.value.reduce((a, c) => a + c.count, 0);
      console.log('计算总商品数:', count);
      return count;
    });
    
    const allPrice = computed(() => {
      const price = cartList.value.reduce((a, c) => a + c.count * c.price, 0);
      console.log('计算总价格:', price);
      return price;
    });

    // 已选择数量
    const selectedCount = computed(() => {
      const count = cartList.value
        .filter((item) => item.selected)
        .reduce((a, c) => a + c.count, 0);
      console.log('计算已选商品数:', count);
      return count;
    });
    // 已选择商品价钱合计
    const selectedPrice = computed(() => {
      const price = cartList.value
        .filter((item) => item.selected)
        .reduce((a, c) => a + c.count * c.price, 0);
      console.log('计算已选商品总价:', price);
      return price;
    });

    // 获取选中的商品ID列表
    const selectedSkuIds = computed(() => {
      const ids = cartList.value.filter(item => item.selected).map(item => item.skuId);
      console.log('获取选中的商品ID列表:', ids);
      return ids;
    });

    return {
      cartList,
      addCart,
      delCart,
      batchDelCart,
      updateCartCount,
      allCount,
      allPrice,
      singleCheck,
      isAll,
      allCheck,
      selectedCount,
      selectedPrice,
      selectedSkuIds,
      clearCart,
      updateNewList,
      mergeCart,
      isLogin,
    };
  },
  {
    persist: true,
  }
);